
package com.udc.medLine.factory;

import java.util.List;

import com.udc.medLine.entity.CondicaoVO;
import com.udc.medLine.entity.Modelo;
import com.udc.medLine.exception.*;
import com.udc.medLine.persistence.ModeloDAO;

public class FactoryModelo {

	private ModeloDAO modeloDAO;

	/**
	 * 
	 */
	public FactoryModelo() {
		super();
		modeloDAO = new ModeloDAO();
		// TODO Stub de construtor gerado automaticamente
	}

	public Modelo getModelo() {
		return (modeloDAO.getModelo());
	}

	public void setModelo(Modelo new_modelo) {
		this.modeloDAO.setModelo(new_modelo);
	}

	public void insert() throws Exception {
		int size = modeloDAO.search(
				"From modelo in class Modelo ,Marca WHERE modelo.nome = '"
						 +  modeloDAO.getModelo().getNome() + "' and modelo.marca.nome ='" +  modeloDAO.getModelo().getMarca().getNome() + "'").size();
		if (size > 0) {
			throw new CampoDuplicadoException("igualdade");
		}
		modeloDAO.insert();
	}
    
	
	
	public void delete() throws Exception {
		int size = modeloDAO.search(
				"From modelo in class Modelo ,Conveniencia as c WHERE c.modelo.id = "
						+ modeloDAO.getModelo().getId()).size();

		if (size > 0) {
			throw new BaseException("referencia");
		}
		
		modeloDAO.delete();
	}

	public void update() throws Exception {
		int size = modeloDAO.search(
				"From modelo in class Modelo WHERE modelo.nome = '"
						+ modeloDAO.getModelo().getNome() + "' and modelo.id != "
						+ modeloDAO.getModelo().getId()).size();
		if (size > 0){
			throw new CampoDuplicadoException("nome");
		}
		modeloDAO.update();
	}

	public List getModelo(String campo, String valor){
		List lista;
		try {
			lista = modeloDAO.search("From modelo in class Modelo WHERE "+campo+" ='"+ valor + "'");
		}
		catch (Exception e){
			return null;
		}
		return lista;
	}
	
	public List getListaModelos(){		
		List lista;	
		try{		
			lista = modeloDAO.search("From modelo in class Modelo");
		}
		catch (Exception e){
		 	return null;
		}
		return lista;		
	}
	
	public Modelo obterModelo() throws Exception {
		return modeloDAO.retrive();
	}
	
	public List search(CondicaoVO condicao) throws Exception {
		String hql = "From modelo in class Modelo WHERE ";
		String campoSQL = null;
		String operadorSQL = null;
		String valorSQL = "'" + condicao.getValor() + "'";
		if (condicao.getCampo().equals("id")) {
			valorSQL = condicao.getValor();
			campoSQL = " id ";
			if (condicao.getOperador().equals("contem")) {
				condicao.setOperador("igual");				
			}
		} else if (condicao.getCampo().equals("nome")) {
			campoSQL = " nome ";
		}
	    else if (condicao.getCampo().equals("marca")) {
		campoSQL = " marca.nome ";
	    }
		if (condicao.getOperador().equals("igual")) {
			operadorSQL = "=";
		} else if (condicao.getOperador().equals("diferente")) {
			operadorSQL = "!=";
		} else if (condicao.getOperador().equals("maior")) {
			operadorSQL = ">";
		} else if (condicao.getOperador().equals("menor")) {
			operadorSQL = "<";
		} else if (condicao.getOperador().equals("contem")) {
			operadorSQL = "like";
			valorSQL = "('%" + condicao.getValor() + "%')";
		}
		hql += campoSQL + " " + operadorSQL + valorSQL;
		return  modeloDAO.search(hql);	
	}
	
	
}
